#ifndef SERIALPORTMANAGER_H
#define SERIALPORTMANAGER_H

#include <QObject>
#include <QSerialPort>
#include <QThread>
#include <QMutex>
#include <QAtomicPointer>
#include <QDebug>

class SerialPortManager : public QObject
{
    Q_OBJECT
public:
    // 获取单例实例（线程安全）
    static SerialPortManager* instance();

    // 公共接口
    void openPort(const QString &portName, qint32 baudRate);
    void closePort();
    void writeData(const QByteArray &data);
    bool isOpen() const;

signals:
    // 操作请求信号（跨线程通信）
    void openPortRequested(const QString &portName, qint32 baudRate);
    void closePortRequested();
    void writeDataRequested(const QByteArray &data);

    // 状态通知信号
    void portOpened(bool success);
    void dataReceived(const QByteArray &data);

private slots:
    // 实际处理操作的槽函数
    void handleOpenPort(const QString &portName, qint32 baudRate);
    void handleClosePort();
    void handleWriteData(const QByteArray &data);
    void handleReadyRead();

private:
    explicit SerialPortManager(QObject *parent = nullptr);
    ~SerialPortManager();

    // 初始化串口对象（在专用线程中执行）
    void init();

    QSerialPort *m_serial;
    static QAtomicPointer<SerialPortManager> m_instance;
    static QMutex m_mutex;
};

#endif // SERIALPORTMANAGER_H
